/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Controladores;

import static Auxiliares.MensajesCodigosError.*;
import BaseDatos.GestorAdministradoresBD;
import Modelo.Administrador;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

/**
 *
 * @author Administrador
 */
public class GestorAdministradores {

////////////////////////////////////////////////////////////////////////////////
// Constructores
////////////////////////////////////////////////////////////////////////////////
    
    public GestorAdministradores(){
        iniciarComponentes();
    }

////////////////////////////////////////////////////////////////////////////////
// Interfaz de la clase
////////////////////////////////////////////////////////////////////////////////

    /**
     * comprueba que el nombre de usuario y contrasena pertenescan a un administrador
     * registrado
     * @param _nombreUsuario
     * @param _contrasena
     * @return devuelve el nombre del administrador encontrado y nulo en caso de que
     * ningun administrador coincida con la clave y contraseña dados
     */
    public String existe(String _nombreUsuario, char[] _contrasena){
        GestorAdministradoresBD administradorBD = new GestorAdministradoresBD();
        return administradorBD.existe(_nombreUsuario, _contrasena);
    }
    
    /**
     * solicita el registro de un nuevo administrador del programa sapec
     * @param _administrador 
     */
    public void registrar(Administrador _administrador){
       GestorAdministradoresBD administradorBD = new GestorAdministradoresBD();
       administradorBD.GestorRegistrosBD(_administrador);
    }
    
    /**
     * comprueba que la contraseña cumpla con los estandares establecidos
     * @param _contrasena 
     */
    public void comprobarContrasena(JPasswordField _contrasena){
        char[] contrasena = _contrasena.getPassword();
        int longitud = obtenerLongitudContrasena(contrasena);
        
        if( !esLongitudAdecuada(longitud) ){
            administradorMensajes.mensajeError(CONTRASENA_FUERA_RANGO, _contrasena); 
        }
    }
    
    /**
     * comprueba que el nombre de usuario cumpla con los estandares establecidos
     * @param _nombreUsuario 
     */
    public void comprobarNombreUsuario(JTextField _nombreUsuario){
        String nombreUsuario = _nombreUsuario.getText();
        int longitud = nombreUsuario.length();
        
        if(!nombreUsuario.trim().equals("")){
            if( !esLongitudAdecuada(longitud) ){
                administradorMensajes.mensajeError(NOMBREUSUARIO_FUERA_RANGO, _nombreUsuario);
            }
        }else{
            administradorMensajes.mensajeError(CAMPO_OBLIGATORIO, _nombreUsuario);
        }
    }
    
    /**
     * camprueba que la contraseñas coincidan entre si
     * @param _contrasena
     * @param _replicaContrasena 
     */
    public void compararContrasenas(
     JPasswordField _contrasena, 
     JPasswordField _replicaContrasena
    ){
        
        char[] contrasena = _contrasena.getPassword();
        char[] replicaContrasena = _replicaContrasena.getPassword();
        
        int longitudContrasena = obtenerLongitudContrasena(contrasena);
        int longitudReplicaContrasena = obtenerLongitudContrasena(replicaContrasena);
        
        if(longitudContrasena == longitudReplicaContrasena){
            for(int cont = 0; cont < longitudContrasena; cont++){
                char caracterContrasena = contrasena[cont];
                char caracterReplica = replicaContrasena[cont];
                
                if(caracterContrasena != caracterReplica){
                    administradorMensajes.mensajeError(CONTRASENAS_NO_COINCIDEN, _replicaContrasena);
                    break;
                }
            }
        }else{
            administradorMensajes.mensajeError(CONTRASENAS_NO_COINCIDEN, _replicaContrasena);
        }
    }
    
////////////////////////////////////////////////////////////////////////////////
// Metodos privados
////////////////////////////////////////////////////////////////////////////////

    
    private void iniciarComponentes(){
        administradorMensajes = new GestorMensajes();
    }
    
    /**
     * verifica que la longitud este entre 4 y 16 caracteres
     * @param _longContrasena
     * @return devuelve verdadero si la longitud esta entre 4 y 16 caracteres
     */
    private boolean esLongitudAdecuada(int _longContrasena){
        final int longitudMinima = 4;
        final int longitudMaxima = 16;
        boolean contrasenaLongitudAdecuada = true;
        if(_longContrasena >= longitudMinima && _longContrasena <= longitudMaxima){
            return contrasenaLongitudAdecuada;
        }
        
        return !contrasenaLongitudAdecuada;
    }
    
    /**
     * @param _contrasena
     * @return devuelve la longitud de la contraseña que se le pase
     */
    private int obtenerLongitudContrasena(char[] _contrasena){
        return _contrasena.length;
    }
    
////////////////////////////////////////////////////////////////////////////////
// Declaracion de variables
////////////////////////////////////////////////////////////////////////////////
    
    private GestorMensajes administradorMensajes;
}
